sql server 2008 r2如何收縮數據庫和文件
發(fā)布時間:2016/11/3 10:54:05
1、右擊數據庫選擇,打開Files窗口
2、Files窗口,F(xiàn)ile type 選擇 Log,單擊OK完成日志收縮。
按以上方法操作沒有效果,原因是數據庫的恢復模式不是簡單模式,只需要將恢復模式改為簡單模式即可用以上操作來收縮日志,方便又好用。
將數據庫恢復模式改為簡單模式方法:
1、右擊數據庫選擇屬性,彈出窗口如下圖,選擇Options選項,將 Recovery Model 改為 Simple 即可。
按如下方法操作也可收縮日志:
1、當數據庫恢復模式為簡單時。使用dbcc shrinkfile (logfile_name,target_size)命令來完成。如
use mydb
dbcc shrinkfile (mydb_log,10) --將mydb_log收縮至10m
2、當數據庫恢復模式為完全時。可以先將數據庫模式改為簡單模式,再使用上述方法來進行。
use master
alter database mydb set recovery simple
dbcc shrinkfile (mydb_log,10) --將mydb_log收縮至10m
也可以直接備份事務日志文件后再收縮:
use master
backup log mydb to disk='d:/dd.bak'
use mydb
dbcc shrinkfile (mydb_log,10) --將mydb_log收縮至10m;
3、通過分離數據庫,然后再刪除事務日志文件,再附加mdf數據文件,也可以達到某種意義上的事務日志收縮。
以下是有關日志文摘
對于每一個數據庫來講,都需要至少一個事務日志文件。事務日志文件是整個數據庫的血液,如果沒有事務日志的話,那么將無法進行任何操作。
事務日志有什么東西?
事務日志記錄著在相關數據庫上的操作,同時還存儲數據庫恢復(recovery)的相關信息。
事務日志與數據庫恢復(recovery)是密切相關的,其實數據庫在啟動時,便會進行相關的恢復(recovery)操作,如下所示。當然,在數據庫還原時,也可以指定手工恢復(recovery).任何在數據庫上的改變,如果在事務日志內被標記為已提交,并用一個LSN(LOG SEQUENCE NUMBER)來標識,同時相關改變就會體現(xiàn)在數據文件上,而被標記為未提交的改變將不會體現(xiàn)在數據文件上。
2010-01-12 18:31:48.72 spid7s Recovery is complete. This is an informationa message only. No user action is required.
事務日志文件還存儲著數據庫需要回滾的相關信息。在SQL Server數據庫上,默認是隱式提交的,也就是說在查詢分析器里面進行的每一個操作,在操作完成后,都是默認已經commit,但如果通過指定begin tran 和rollback tran的命令來標識事務時,rollback tran就需要使用事務日志內的相關信息才可以回滾。當然,如果SQL Server遇到相關錯誤時,如死鎖,那么也會產生一個內部回滾,這些都需要用到事務日志文件。
為什么要收縮事務日志?
收縮日志的原因有很多種,有些則是考慮空間不足,有些則是應用程序限制導致的,一般情況下,是不建議對事務日志進行其他改變的,如需要控制事務日志的大小,則可以通過安排事務日志備份來解決。如果確定事務日志包含將不再使用的未使用空間,則可以通過減少事務日志的大小,以便回收過多空間。但這種情況對于一個DBA來講,應該要盡量避免。
僅當數據庫處于聯(lián)機狀態(tài),而且至少一個虛擬日志文件可用時,收縮才會發(fā)生。在某些情況下,直到下一個日志截斷后,才能收縮日志。
事務日志收縮的原理:
每個事務日志由多個虛擬日志文件組成(virtual log file).虛擬日志文件沒有固定的大小,也沒有固定的個數。在創(chuàng)建事務日志文件或者擴展事務日志文件時,SQL SERVER便會自動創(chuàng)建合適大小的虛擬日志文件,DBA無法控制虛擬日志文件的大小和個數。在擴展日志文件后,虛擬文件的大小是現(xiàn)有日志大小和新文件增量大小之和。因此,如果在創(chuàng)建數據庫時,對數據庫指定了比較小的初始大小,又指定了比較小的日志增長量,隨著事務日志的自動擴展,虛擬日志文件個數會越來越多,從而影響了數據庫性能。因此,在創(chuàng)建數據庫時,盡量指定比較合適的初始事務日志大小,同時指定合理的事務日志增長量,這點可以參考數據文件的標準。如果大于10G或者更大的話,則指定固定的增長量,如果比較小,則指定按百分比的增長量來進行。